package com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.ownerContract;

import com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractHouseOwnerPropertyDO;
import com.xiaoshuidi.cloud.module.contract.service.contract.dto.RentFreePeriodDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

import static com.xiaoshuidi.cloud.module.contract.util.date.DateUtils.FORMAT_DATE;

@Schema(description = "管理后台 - 业主合同更新 Request VO")
@Data
@ToString(callSuper = true)
public class ContractHouseOwnerUpdateReqVO {

    /**
     * ID
     */
    @Schema(description = "ID", required = true)
    @NotNull(message = "ID不能为空")
    private Long id;

    /**
     * 业主姓名
     */
    @Schema(description = "业主姓名")
    private String ownerName;
    /**
     * 手机号
     */
    @Schema(description = "手机号")
    private String phone;
    /**
     * 证件类型
     */
    @Schema(description = "证件类型")
    private String idType;
    /**
     * 证件号码
     */
    @Schema(description = "证件号码")
    private String idNumber;
    /**
     * 银行卡号
     */
    @Schema(description = "银行卡号")
    private String creditCard;
    /**
     * 所属银行
     */
    @Schema(description = "所属银行")
    private String bank;
    /**
     * 所属支行
     */
    @Schema(description = "所属支行")
    private String branchBank;
    /**
     * 持卡人
     */
    @Schema(description = "持卡人")
    private String cardholder;
    /**
     * 纸质合同编号
     */
    @Schema(description = "纸质合同编号")
    private String offlineNo;

    /**
     * 合同开始时间
     */
    @Schema(description = "合同开始时间")
    @DateTimeFormat(pattern = FORMAT_DATE)
    @NotNull(message = "合同开始时间不能为空")
    private LocalDate startTime;
    /**
     * 合同结束时间
     */
    @Schema(description = "合同结束时间")
    @DateTimeFormat(pattern = FORMAT_DATE)
    @NotNull(message = "合同结束时间不能为空")
    private LocalDate endTime;
    /**
     * 押金
     */
    @Schema(description = "押金")
    @NotNull(message = "押金不能为空")
//    @DecimalMin(value = "0.01", message = "押金最小值不能低于0.01元")
    private BigDecimal deposit;
    /**
     * 月租金
     */
    @Schema(description = "月租金")
    @NotNull(message = "租金不能为空")
    @DecimalMin(value = "0.01", message = "租金最小值不能低于0.01元")
    private BigDecimal monthRent;
    /**
     * 支付方式
     */
    @Schema(description = "支付方式 1月付 3季付 6半年付 12年付 其他")
    @NotNull(message = "支付方式不能为空")
    private Integer payMethodF;

    /**
     * 提前收租天数
     */
    @Schema(description = "提前收租天数")
    @NotNull(message = "账单日期不能为空")
    private Integer advancedDays;

    /**
     * 合同附件
     */
    @Schema(description = "合同附件")
    private List<String> contractAnnexUrls;
    /**
     * 证件附件
     */
    @Schema(description = "证件附件")
    private List<String> documentAnnexUrls;
    /**
     * 免租期
     */
    @Schema(description = "免租期")
    private List<RentFreePeriodDTO> rentFreePeriod;
    /**
     * 备注
     */
    @Schema(description = "备注")
    private String remarks;

    /**
     * 关联房间
     */
    @Schema(description = "关联房间")
    @NotNull(message = "关联房间不能为空")
    private ContractOwnerRoomRefVO refRoom;

    /**
     * 原业主合同编号（续租业主合同需传值）
     */
    @Schema(description = "原业主合同编号")
    private Long originalContractId;

    /**
     * 支行省
     */
    @Schema(description = "支行省")
    private String bankProvince;

    /**
     * 支行市
     */
    @Schema(description = "支行市")
    private String bankCity;

    /**
     * 支行编码
     */
    @Schema(description = "支行编码")
    private String bankCode;

    /**
     * 续租根合同ID
     */
    private Long rootId;

    /**
     * 合同类型 paper纸质合同 | electronic 电子合同
     */
    @Schema(description = "合同类型")
    @NotNull(message = "合同类型不能为空")
    private String contractType;

    /**
     * 联系地址
     */
    private String contactAddress;

    /**
     * 行政地址
     */
    private String administrativeAddress;

    /**
     * 期满延期约定
     */
    private Integer extensionAgreement;

    /**
     * 抵押状态
     */
    private Integer mortgageStatus;

    /**
     * 是否可以饲养宠物
     */
    private Integer feedingPet;

    /**
     * 物业是否正规
     */
    private Integer propertyRegular;

    /**
     * 水表户号
     */
    private String watermeterNum;

    /**
     * 水表初始读数
     */
    private String watermeterInitial;

    /**
     * 电表户号
     */
    private String electricitymeterNum;

    /**
     * 电表初始读数
     */
    private String electricitymeterInitial;

    /**
     * 燃气户号
     */
    private String gasNum;

    /**
     * 燃气初始读数
     */
    private String gasInitial;

    /**
     * 消防设备
     */
    private Integer fireDevice;

    /**
     * 供暖方式
     */
    private Integer heatingMethod;

    /**
     * 紧急联系人姓名
     */
    private String emergencyContactName;

    /**
     * 紧急联系人手机号
     */
    private String emergencyContactPhone;

    /**
     * 签约人
     */
    private Long signerId;

    /**
     * 签约人姓名
     */
    private String signerName;

    /**
     * 负责管家id
     */
    private Long butlerId;

    /**
     * 负责管家姓名
     */
    private String butlerName;

    /**
     * 物品凭证
     */
    private List<ContractHouseOwnerPropertyDO> propertyList;

    /**
     * 家具家电
     */
    private List<ContractHouseOwnerPropertyDO> furnitureList;

}
